//
// Created by Fabrice Aneche on 06/01/14.
// Copyright (c) 2014 Dailymotion. All rights reserved.
//

#import "NSData+ImageContentType.h"


@implementation NSData (ImageContentType)

+ (NSString *)sd_contentTypeForImageData:(NSData *)data {
    uint8_t c; // 无符号8位二进制整型，即unsigned char类型
    // 1字节（Bytes） = 8位二进制 = 2位16进制
    [data getBytes:&c length:1]; // getBytes:length: 截取data 长度为1字节的值
    switch (c) {
        case 0xFF: // 当值为0xFF时
            return @"image/jpeg"; // 返回@"image/jpeg" 以此类推
        case 0x89:
            return @"image/png";
        case 0x47:
            return @"image/gif";
        case 0x49:
        case 0x4D:
            return @"image/tiff";
        case 0x52: // 当值为0x52时需要判断
            // R as RIFF for WEBP
            if ([data length] < 12) { // 如果data的长度小于12，则返回值为空
                return nil;
            }
            // 不小于12时 截取data的0到12的范围的二进制值，通过NSASCIIStringEncoding编码将其转化为NSString（字符串）类型，
            NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
            if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) { // 如果字符串的前缀为RIFF并且后缀为WEBP时，则返回image/webp
                
                return @"image/webp";
            }

            return nil;
    }
    return nil;
}

@end


@implementation NSData (ImageContentTypeDeprecated)

+ (NSString *)contentTypeForImageData:(NSData *)data { // 当NSData类执行此类方法时，直接调用sd_contentTypeForImageData:方法，即实现的对contentTypeForImageData:方法的弃用
    
    return [self sd_contentTypeForImageData:data];
}

@end
